/*
 * Player.h
 *
 *  Created on: 2011/05/28
 *      Author: naoki
 */

#ifndef INCLUDED_NTENGINE_SOUND_PLAYER_H
#define INCLUDED_NTENGINE_SOUND_PLAYER_H

#include "NTEngine/NTEngine.h"
#include "NTEngine/Sound/Wave.h"

namespace NTEngine {
namespace Sound {

/**
 * @brief 再生プレイヤー
 */
class Player {
public:
	static const int LOOP_NONE;
	static const int LOOP_INFINITY;
	/**
	 * @brief Bankから生成します
	 */
	static Player create( Wave );

	/**
	 * @brief 再生させます。
	 */
	void play();

	/**
	 * @brief 中断させます。
	 */
	void pause();

	/**
	 * @brief 停止させます。
	 */
	void stop();

	/**
	 * @brief ループ回数を設定します。
	 * @param int ループ回数
	 *        1〜:指定回数ループ
	 *        LOOP_NONE:ループしない
	 *        LOOP_INFINITY:無限ループ
	 */
	void setLoop( int );

	/**
	 * @brief ループ設定か問い合わせます。
	 */
	bool isLoop() const;

	/**
	 * @brief 再生中か問い合わせます。
	 */
	bool isPlaying() const;

	/**
	 * @brief ボリュームを設定します。
	 * @param int 0～100の値
	 */
	void setVolume( int );

	/**
	 * @brief 設定されているボリュームを取得します。
	 * デフォルトは50に設定されています。
	 */
	int volume() const;

	/**
	 * @brief ピッチを設定します。
	 * @param float 0.5f～2.fの値
	 */
	void setPitch( float );

	/**
	 * @brief 設定されているピッチを取得します。
	 * デフォルトは1.fに設定されています。
	 */
	float pitch() const;

	Player();
	~Player();
	Player( const Player& );
	Player& operator=( const Player& );
	operator void*() const;
	void release();
	bool operator==( const Player& ) const;
	bool operator!=( const Player& ) const;
	int referenceCount() const;
private:
	class Impl;
	Impl* mImpl;
};

} // namespace Sound
} // namespace NTEngine

#endif // INCLUDED_NTENGINE_SOUND_PLAYER_H
